package com.thermal.thermal_inspection.mapper;

import com.thermal.thermal_inspection.entity.StatisticsUser;
import com.thermal.thermal_inspection.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.sql.Timestamp;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;

@Mapper
@Repository
public interface StatisticsUserMapper {
    /**
     * 查找某个时间区域内的统计数据
     */
    List<StatisticsUser> getStatisticsUserByTime(Date startDate, Date endDate);

    /**
     * 查找某个时间之前的所有记录
     */
    List<StatisticsUser> getStatisticsUserBeforeStart(Date startDate);

    /**
     * 查找是否存在指定用户
     */
    List<StatisticsUser> getStatisticsUserByUserId(int userId);

    /**
     * 查找是否存在指定班组
     */
    List<StatisticsUser> getStatisticsUserByClassId(int classId);

    /**
     * 检查是否有该用户今天的统计数据，如果有则更新，没有则新建
     */
    void updateStatistics(int id, int classId, int timeout, int finish, int abnormal, int processing, int cheat, Date today);

    /**
     * 查找是否存在指定机组
     */
    List<StatisticsUser> getStatisticsUserByUnitId(int unitId);

    /**
     * 插入当日所有用户和机组的组合
     */
    void insertAllUserUnit();

    /**
     * 更新所有统计数据
     */
    void updateAllStatistic();

    /**
     * 获取所有工人某段时间的统计结果
     */
    StatisticVO getAllStatistic(Date startDate, Date endDate);

    /**
     * 按班组来进行统计
     */
    List<StatisticClassVO> getStatisticClasses(Date startDate, Date endDate);

    /**
     * 获取某机组某段时间内统计数据总和
     */
    StatisticVO getUnitStatistic(int unitId, Date startDate, Date endDate);

    /**
     * 获取某个机组的班组成员具体信息
     */
    List<StatisticMemberVO> getMembers(int unitId, Date startDate, Date endDate);

    /**
     * 获取某机组的班组分类
     */
    List<StatisticUnitClassVO> getUnitClass(int unitId, Date startDate, Date endDate);

    /**
     * 按照机组分类获得统计数据
     */
    List<StatisticUnitMidVO> getStatisticUnitMid(Date startDate, Date endDate);

    /**
     * 判断是否存在今天的数据
     */
    boolean existsTodayData(LocalDate today);

    /**
     * 统计某班组所有成员所有机组的数据
     */
    List<StatisticMemberVO> getAllUnitClassMember(int classId, Date startDate, Date endDate);

    /**
     * 统计某工人巡查，异常，漏检，不合格数
     */
    StatusNumVO getStatusNumVOByUserId(int userId);

    /**
     * 插入某位工人今天的数据
     */
    int insertWorker(int userId);

    /**
     * 插入新的机组
     */
    int insertUnit(int unitId);

    /**
     * 查看所有用户今日巡查，异常，漏检，不合格数之和
     */
    StatusNumVO getTodayStatusNumVO();

    /**
     * 获取某用户未巡检统计用户数
     */
    List<StatisticsUser> getUserNonStatistic(int userId, Timestamp startTime);
}
